01.Go Variable
Table of Contents
变量
变量声明
var <variable name> <variable type> = <value> // 使用 var 进行变量定义, 最完整的变量定义
var age int = 18 // 声明变量类型并赋值
var <variable name> <type> // 变量定义, 只定义变量名和类型, 变量默认为对应类型的初始值
var str string // 声明变量和类型, 未赋值使用默认值(string 默认值 "")
var <name> = <value> // 变量定义, 通过值自动推导变量类型
var age = 18 // 声明变量, 赋值, 并使用类型推导
<variable name> := <value> // 变量定义, 通过值自动推导类型, 仅能在函数内部使用
name := "str" // 声明变量, 赋值, 并使用类型推导(仅限于函数内使用)
var (
str string // "" 声明变量未赋值, 使用 string 类型默认值 ""
num int // 0 声明变量未赋值, 使用 int 类型默认值 0
boolean bool // false 声明变量未赋值, 使用 bool 类型默认值 false
)
var (
str string = "hello" // 批量声明并赋值
num int = 4
boolean = true
)
str, num := "hello", 3 // 多个变量声明并赋值
匿名变量
Go 中存在未被使用的变量会报错
使用匿名变量 _
处理无需使用的变量
var name string = "John"
fmt.Println("hello world")
> ./main.go:10:6: name declared but not used // 变量 name 未使用, 报错
name, _ := "John", "variable" // 使用匿名变量, 忽略后一个值
fmt.Println("hello ", name)
> hello John
import {
. "fmt" // 使用模块时无需添加模块名称
_ "os" // 引入但未使用的模块, _ 处理后不会报错
}
Println("hello world") // 引入时使用 . 使调用 fmt 方法无需添加模块名称
常量
常量声明时候必须赋值
常量一旦声明就不可变化
const e = 2.7182 // 常量声明必须要赋值, 且不可更改
const ( // 快速声明常量, a b 赋值 10
a = 10 // a = 10
b // a = 10 继承上一个变量的值
c = 5 // c = 5
d // d = 5
)
iota
iota 是定义常量时使用的自增关键字
同 const 定义块互不干扰, 所有注释行和空行全部忽略
从第 1 行开始,iota 从 0 逐行加 1
const (
a = iota // iota = 0 a = 0
b // iota = 1 b = 1
c // iota = 2 c = 2
)
const ( // 变更初始值
a = iota + 3 // iota = 0 a = 3
b // iota = 1 b = 4
c = iota + 2 // iota = 2 c = 4
d // iota = 3 d = 5
)
const ( // iota 插值
a = iota // iota = 0 a = 0
b = 5 // iota = 1 b = 5
c = iota // iota = 2 c = 2
d // iota = 3 d = 3
)
打印
- 通过占位符替换值打印
- 通过不同占位符可以打印变量不同属性值
- 万能占用符
%v
(%#v %+v
表示不同打印形式)
fmt.Printf(<str>, <string>, <int>, <bool> ...) // 第一个参数是字符串,后接任意类型值, 占位符需与值数量对应
fmt.Printf("common: %v \n", "common") // 万能占用符, 自动判断类型
fmt.Printf("string: %s \n", "string") // 字符串变量占位符
fmt.Printf("char : %c \n", 'c') // 单个字符变量占位符, 单个字符用单引号
fmt.Printf("number: %d \n", 4) // 整形变量占位符
fmt.Printf("float : %f \n", 2.33) // 浮点型变量占位符
fmt.Printf("bool : %t \n", true) // 布尔值变量占位符
fmt.Printf("point : %p \n", *variable) // 指针变量占位符
fmt.Printf("variable type: %T \n", variable) // 变量类型占位符
附录
Golang 中存在一些关键字和保留字, 不能作为变量名称
关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
保留字
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover